Many distributed processing systems utilize server/client configurations. According to most such configurations, a server or controller issues commands to various clients. The clients execute the commands and typically provide results of the execution to the controller. One application of server/client configurations is in distributed testing and/or monitoring applications, where each client is instructed to perform all or a portion of a testing and/or monitoring task, such as detecting or simulating a malicious attack, simulating a load, etc.
There are various existing communication approaches for implementing client/server communications. According to a message-based approach, the controller sends an instruction message or messages to each client for each action, or portion thereof, that the client is to perform. The clients must provide the controller with a response to each message to validate the success or failure of the request. With most message-based approaches, communications between the controller and the clients are initiated by the controller. Accordingly, the controller must know the identity and location of each client before it can issue an instruction. This increases the complexity of controller implementation and also places practical limitations on the placement of clients. For example, a client placed behind a firewall or network address translation (NAT) device may not be reachable by the controller without considerable overhead complexity and expense.